package view;

import java.awt.Component;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;

public abstract class GridView extends View{

	protected GridBagConstraints info;
	
	public GridView(String _name) {
		super(_name);
		this.layout=new GridBagLayout();
		this.info=new GridBagConstraints();
		this.setLayout(layout);
	}
	public GridView(String _name,Class<?> ...interfaces){
		super(_name,interfaces);
		this.layout=new GridBagLayout();
		this.info=new GridBagConstraints();
		this.setLayout(layout);
	}


	private static final long serialVersionUID = 3197608320370693544L;

	/**aggiunge velocemente il componente utilizzando i 4 parametri di GridBagConstraints che si usano di solito
	 * e cioe' gridx, gridy, gridwidth e gridheight
	 * @param cmp indica il componente da aggiungere nella vista
	 * @param gridx indica il gridx del componente stesso
	 * @param gridy indica il gridy del compoenente stesso
	 * @param gridwidth indica il gridwidth del componente stesso
	 * @param gridheight indica il gridheight del componente stesso
	 */
	public void add(Component cmp,int gridx, int gridy, int gridwidth, int gridheight){
		this.info.gridx=gridx;
		this.info.gridy=gridy;
		this.info.gridwidth=gridwidth;
		this.info.gridheight=gridheight;
		this.add(cmp,this.info);
	}
	
	public void add(Component cmp,int gridx, int gridy, int gridwidth, int gridheight,double weightx, double weighty){
		this.info.weightx=weightx;
		this.info.weighty=weighty;
		this.add(cmp,gridx,gridy,gridwidth,gridheight);
	}
	/**agigunge velocemente il componente utilizzando i parametri specificati per impostare correttamente il GridBagLayout
	 * 
	 * @param cmp il componente da agigungere nella view
	 * @param gridx indica l'indice x di dove si trova l'angolo superiore sinistro del componente nella griglia
	 * @param gridy indica l'indice y di dove si trova l'angolo superiore sinistro del componente nella griglia
	 * @param gridwidth indica quante celle lungo x il componente occupa
	 * @param gridheight indica quante celle lungo y il componente occupa
	 * @param weightx indica quanto peso ha la lunghezza del componente su tutta la griglia
	 * @param weighty indica quanto peso ha la altezza del componente su tutta la griglia
	 * @param fill indica il metodo di riempimento dello spazio vuoto
	 */
	public void add(Component cmp,int gridx,int gridy,int gridwidth, int gridheight,double weightx,double weighty,int fill){
		this.info.fill=fill;
		this.add(cmp,gridx,gridy,gridwidth,gridheight,weightx,weighty);
	}
	@Override
	public abstract void showview();

}
